﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using System.Data;
using produccion.reportes;
using produccion.vistamodelo;
using System.ComponentModel;

using System.Windows.Controls.Primitives;
using System.Threading;
using System.Globalization;
using System.Collections;

namespace produccion.forms
{
    /// <summary>
    /// Lógica de interacción para FRMpedCliTal.xaml
    /// </summary>
    public partial class FRMconPedCliTal : Window
    {
        MDOgeneral MdoGeneral = new MDOgeneral();//FJRF - Traemos toda la informacion y funciones de MdoGeneral

        DataTable DtConsulta;//FJRF - Usamos este DataTable para hacer consultas generales
        DataSet DsConsulta;//FJRF - Usamos este DataTable para hacer consultas generales
        String StrConsulta;//FJRF - Usamos este DataTable para hacer consultas generales

        DataTable DtColecciones;
        int IntColumnaSeleccion;

        public FRMconPedCliTal()
        {
            InitializeComponent();
        }

        private void butSal_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void butImp_Click(object sender, RoutedEventArgs e)
        {
            conPedCliTal.imprimir();  
        }

        private void butPro_Click(object sender, RoutedEventArgs e)
        {
            String StrColecciones = "";//FJRF - Variable que va a tener las colecciones

            String StrSeleccionado = "", StrCodigoSeleccionado = "", StrColeccionesSeleccionadas = "";
            for (int IntFilaRecorrida = 0; IntFilaRecorrida < DtgColecciones.Items.Count; IntFilaRecorrida++)
            {
                #region FJRF - Extraemos los datos del grid
                StrSeleccionado = ((System.Data.DataRowView)(DtgColecciones.Items[IntFilaRecorrida])).Row.ItemArray[IntColumnaSeleccion - 1].ToString();//FJRF - Extraemos el dato del grid
                CheckBox mycheckbox = DtgColecciones.Columns[IntColumnaSeleccion].GetCellContent(DtgColecciones.Items[IntFilaRecorrida]) as CheckBox;//FJRF - Decimos cual es la columna que tiene el chek

                StrCodigoSeleccionado = ((System.Data.DataRowView)(DtgColecciones.Items[IntFilaRecorrida])).Row.ItemArray[0].ToString();//FJRF - Extraemos el dato del grid
                #endregion

                #region FJRF - Guardamos o eliminamos los datos
                if (mycheckbox == null)//FJRF - Si viene null hacemos lo siguiente
                {
                    if (StrSeleccionado == "SI")//FJRF - Si esta seleccionado entonces hacemos lo siguiente
                    {
                        StrColeccionesSeleccionadas = StrColeccionesSeleccionadas + StrCodigoSeleccionado + "-";
                    }
                }
                else//FJRF - Si no esta nulo hacemos lo siguiente
                {
                    if (mycheckbox.IsChecked == true)//FJRF - Si esta seleccionado entonces hacemos lo siguiente
                    {
                        StrColeccionesSeleccionadas = StrColeccionesSeleccionadas + StrCodigoSeleccionado + "-";
                    }
                }
                #endregion
            }
            StrColecciones = StrColeccionesSeleccionadas;
            conPedCliTal.procesar(StrColecciones);
        }

        private void botTodo_Click(object sender, RoutedEventArgs e)
        {
            conPedCliTal.selTodo();
        }

        private void butNing_Click(object sender, RoutedEventArgs e)
        {
            conPedCliTal.selNinguno();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            #region FJRF - Carga las colecciones
            //FJRF - CARGAMOS EL CODIGO DEL PROVEEDOR POR APARTE
            StrConsulta = "SELECT UPPER(CODCLC_CLC) AS COD, UPPER(NOMCLC_CLC) AS COLECCION, '' AS SI FROM MAECLCP ORDER BY NOMCLC_CLC ";//FJRF - Armamos la consulta
            DtColecciones = MdoGeneral.consulta(StrConsulta);//FJRF - Ejecutamos la consulta

            DtgColecciones.ItemsSource = DtColecciones.DefaultView;//FJRF - Visualizamos los datos

            DataGridCheckBoxColumn ColCheckBoxColumnNew = new DataGridCheckBoxColumn();//FJRF - Creamos una nueva columna tipo checkbox
            DtgColecciones.Columns.Add(ColCheckBoxColumnNew);//FJRF - Adicionamos la nueva columna

            IntColumnaSeleccion = DtgColecciones.Columns.Count - 1;
            DtgColecciones.Columns[IntColumnaSeleccion].Header = "Seleccione";//FJRF - Le ponemos titulo a la columna

            DtgColecciones.Columns[0].Visibility = Visibility.Hidden;//FJRF - Ocultamos la columna que controla el eliminar
            DtgColecciones.Columns[2].Visibility = Visibility.Hidden;//FJRF - Ocultamos la columna que controla el eliminar
            #endregion

            Keyboard.Focus(datDesde);
        }

        private void datInfo_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.Enter && elemento != null)
            {
                e.Handled = true;
                elemento.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
            }
        }

        //
        // SINGLE CLICK EDITING
        //
        private void DataGridCell_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            DataGridCell cell = sender as DataGridCell;
            if (cell != null && !cell.IsEditing && !cell.IsReadOnly)
            {
                if (!cell.IsFocused)
                {
                    cell.Focus();
                }
                DataGrid dataGrid = FindVisualParent<DataGrid>(cell);
                if (dataGrid != null)
                {
                    if (dataGrid.SelectionUnit != DataGridSelectionUnit.FullRow)
                    {
                        if (!cell.IsSelected)
                            cell.IsSelected = true;
                    }
                    else
                    {
                        DataGridRow row = FindVisualParent<DataGridRow>(cell);
                        if (row != null && !row.IsSelected)
                        {
                            row.IsSelected = true;
                        }
                    }
                }
            }
        }

        static T FindVisualParent<T>(UIElement element) where T : UIElement
        {
            UIElement parent = element;
            while (parent != null)
            {
                T correctlyTyped = parent as T;
                if (correctlyTyped != null)
                {
                    return correctlyTyped;
                }

                parent = VisualTreeHelper.GetParent(parent) as UIElement;
            }
            return null;
        }

        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.F3 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta == true) { MDOgeneral.logBusquedadAbierta = false; }
            }

            if (e.Key == Key.F4 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta1 == true) { MDOgeneral.logBusquedadAbierta1 = false; }
            }

            if (e.Key == Key.F5 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta2 == true) { MDOgeneral.logBusquedadAbierta2 = false; }
            }
        }

        private void DtgColecciones_PreviewMouseUp(object sender, MouseButtonEventArgs e)
        {
            #region FJRF - Saber Fila y Columna indexada

            int IntColumnaIndexada, IntFilaIndexada;
            DependencyObject dep = (DependencyObject)e.OriginalSource;

            //Stepping through the visual tree
            while ((dep != null) && !(dep is System.Windows.Controls.DataGridCell))
            {
                dep = VisualTreeHelper.GetParent(dep);
            }

            //Is the dep a cell or outside the bounds of Window1?
            if (dep == null | !(dep is System.Windows.Controls.DataGridCell))
            {
                return;
            }
            else
            {
                System.Windows.Controls.DataGridCell cell = new System.Windows.Controls.DataGridCell();
                cell = (System.Windows.Controls.DataGridCell)dep;
                while ((dep != null) && !(dep is DataGridRow))
                {
                    dep = VisualTreeHelper.GetParent(dep);
                }

                if (dep == null)
                {
                    return;
                }
                int colindex = cell.Column.DisplayIndex;  //this returns COLUMN INDEX
                IntColumnaIndexada = colindex;

                DataGridRow row = dep as DataGridRow;
                System.Windows.Controls.DataGrid dataGrid = ItemsControl.ItemsControlFromItemContainer(row) as System.Windows.Controls.DataGrid;
                int rowindex = dataGrid.ItemContainerGenerator.IndexFromContainer(row); //this returns ROW INDEX

                IntFilaIndexada = rowindex;
            }
            #endregion

            if (IntColumnaIndexada == IntColumnaSeleccion)//FJRF - Si la columnas es la que tiene el chek hacemos lo siguiente
            {
                #region FJRF - Para que la seleccion se haga con un solo clic
                CheckBox mycheckbox = DtgColecciones.Columns[IntColumnaIndexada].GetCellContent(DtgColecciones.Items[IntFilaIndexada]) as CheckBox;//FJRF - Convertimos el objeto en algo manipulable
                if (mycheckbox.IsChecked == true)//FJRF - Si esta seleccionado hacemos lo siguiente
                {
                    mycheckbox.IsChecked = false;//FJRF - Le quitamos la seleccion
                    DtColecciones.Rows[IntFilaIndexada][IntColumnaIndexada - 1] = "";//FJRF - Informamos que no se va a eliminar
                }
                else//FJRF - Si no esta seleccionado hacemos lo siguiente
                {
                    mycheckbox.IsChecked = true;//FJRF - Lo seleccionamos
                    DtColecciones.Rows[IntFilaIndexada][IntColumnaIndexada - 1] = "SI";//FJRF - Informamos que se va a eliminar
                }
                #endregion

                SelectCellByIndex(DtgColecciones, IntFilaIndexada, IntColumnaIndexada - 1);//FJRF - Le decimos cual es la nueva posicion
            }

        }
        #region FJRF - FuncionesEspecialesParaLasPropiedadesDeLaCeldaYElFoco

        public static T FindVisualChild<T>(DependencyObject obj) where T : DependencyObject
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
            {
                DependencyObject child = VisualTreeHelper.GetChild(obj, i);
                if (child != null && child is T)
                    return (T)child;
                else
                {
                    T childOfChild = FindVisualChild<T>(child);
                    if (childOfChild != null)
                        return childOfChild;
                }
            }
            return null;
        }
        public static DataGridCell GetCell(DataGrid dataGrid, DataGridRow rowContainer, int column)
        {
            if (rowContainer != null)
            {
                DataGridCellsPresenter presenter = FindVisualChild<DataGridCellsPresenter>(rowContainer);
                if (presenter == null)
                {
                    /* if the row has been virtualized away, call its ApplyTemplate() method 
                     * to build its visual tree in order for the DataGridCellsPresenter
                     * and the DataGridCells to be created */
                    rowContainer.ApplyTemplate();
                    presenter = FindVisualChild<DataGridCellsPresenter>(rowContainer);
                }
                if (presenter != null)
                {
                    DataGridCell cell = presenter.ItemContainerGenerator.ContainerFromIndex(column) as DataGridCell;
                    if (cell == null)
                    {
                        /* bring the column into view
                         * in case it has been virtualized away */
                        dataGrid.ScrollIntoView(rowContainer, dataGrid.Columns[column]);
                        cell = presenter.ItemContainerGenerator.ContainerFromIndex(column) as DataGridCell;
                    }
                    return cell;
                }
            }
            return null;
        }
        public static void SelectRowByIndexes(DataGrid dataGrid, params int[] rowIndexes)
        {
            if (!dataGrid.SelectionUnit.Equals(DataGridSelectionUnit.FullRow))
                throw new ArgumentException("The SelectionUnit of the DataGrid must be set to FullRow.");

            if (!dataGrid.SelectionMode.Equals(DataGridSelectionMode.Extended))
                throw new ArgumentException("The SelectionMode of the DataGrid must be set to Extended.");

            if (rowIndexes.Length.Equals(0) || rowIndexes.Length > dataGrid.Items.Count)
                throw new ArgumentException("Invalid number of indexes.");

            dataGrid.SelectedItems.Clear();
            foreach (int rowIndex in rowIndexes)
            {
                if (rowIndex < 0 || rowIndex > (dataGrid.Items.Count - 1))
                    throw new ArgumentException(string.Format("{0} is an invalid row index.", rowIndex));

                object item = dataGrid.Items[rowIndex]; //=Product X
                dataGrid.SelectedItems.Add(item);

                DataGridRow row = dataGrid.ItemContainerGenerator.ContainerFromIndex(rowIndex) as DataGridRow;
                if (row == null)
                {
                    dataGrid.ScrollIntoView(item);
                    row = dataGrid.ItemContainerGenerator.ContainerFromIndex(rowIndex) as DataGridRow;
                }
                if (row != null)
                {
                    DataGridCell cell = GetCell(dataGrid, row, 0);
                    if (cell != null)
                        cell.Focus();
                }
            }
        }
        public static void SelectCellByIndex(DataGrid dataGrid, int rowIndex, int columnIndex)
        {
            if (!dataGrid.SelectionUnit.Equals(DataGridSelectionUnit.Cell))
                throw new ArgumentException("The SelectionUnit of the DataGrid must be set to Cell.");

            if (rowIndex < 0 || rowIndex > (dataGrid.Items.Count - 1))
                throw new ArgumentException(string.Format("{0} is an invalid row index.", rowIndex));

            if (columnIndex < 0 || columnIndex > (dataGrid.Columns.Count - 1))
                throw new ArgumentException(string.Format("{0} is an invalid column index.", columnIndex));

            dataGrid.SelectedCells.Clear();

            object item = dataGrid.Items[rowIndex]; //=Product X
            DataGridRow row = dataGrid.ItemContainerGenerator.ContainerFromIndex(rowIndex) as DataGridRow;
            if (row == null)
            {
                dataGrid.ScrollIntoView(item);
                row = dataGrid.ItemContainerGenerator.ContainerFromIndex(rowIndex) as DataGridRow;
            }
            if (row != null)
            {
                DataGridCell cell = GetCell(dataGrid, row, columnIndex);
                if (cell != null)
                {
                    DataGridCellInfo dataGridCellInfo = new DataGridCellInfo(cell);
                    dataGrid.SelectedCells.Add(dataGridCellInfo);

                    cell.Focus();
                }
            }
        }
        #endregion
    }
    public class conPedCliTal : ObservableObject 
    {
        public conPedCliTal()
        {
            consColor();
            consCli();
            //------------------------------------------------------------------------
            buscarReferencia = new VMbuscarReferencia();
            buscarReferencia.TieneColor = false;
            buscarReferencia.PropertyChanged += onBuscarReferenciaPropertyChanged;

            MDOgeneral.conectar();
            strTituloVentana = "Consolidado pedido cliente/talla - Usuario: " + MDOgeneral.usuario + " - [FRMconPedCliTal]";
        }

        //------------------------------------------
        void onBuscarReferenciaPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            try
            {
                if (e.PropertyName == "IsOpen")
                {
                    if (!buscarReferencia.IsOpen)
                    {
                        foreach (string x in buscarReferencia.listaProducto)
                        {
                            codref = x;
                        }
                    }
                }
            }
            catch (Exception ex) { throw ex; }
        }

        RelayCommand _cmdBuscarReferencia;
        public ICommand cmdBuscarReferencia
        {
            get
            {
                if (_cmdBuscarReferencia == null)
                {
                    _cmdBuscarReferencia = new RelayCommand(x => buscarReferencias());
                }
                return _cmdBuscarReferencia;
            }
        }

        public void buscarReferencias()
        {
            try
            {
                buscarReferencia.IsOpen = true;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private string _strTituloVentana;
        public string strTituloVentana
        {
            get { return _strTituloVentana; }
            set { _strTituloVentana = value; RaisePropertyChangedEvent("strTituloVentana"); }
        }

        private VMbuscarReferencia _buscarReferencia;
        public VMbuscarReferencia buscarReferencia
        {
            get { return _buscarReferencia; }
            set { _buscarReferencia = value; RaisePropertyChangedEvent("buscarReferencia"); }
        }

        private DateTime _desde = DateTime.Today;
        public DateTime desde 
        {
            get { return _desde; }
            set { _desde = value; RaisePropertyChangedEvent("desde"); }
        }

        private DateTime _hasta = DateTime.Today;
        public DateTime hasta {
            get { return _hasta; }
            set { _hasta = value; RaisePropertyChangedEvent("hasta"); }
        }

        private List<clases.CLSMAECLIP> _lisCli = new List<clases.CLSMAECLIP>();
        public List<clases.CLSMAECLIP> lisCli 
        {
            get { return _lisCli; }
            set { _lisCli = value; RaisePropertyChangedEvent("lisCli"); }
        }

        private clases.CLSMAECLIP _selCli = new clases.CLSMAECLIP();
        public clases.CLSMAECLIP selCli 
        {
            get { return _selCli; }
            set { _selCli = value; RaisePropertyChangedEvent("selCli"); }
        }

        private string _estado="P";
        public string estado
        {
            get { return _estado; }
            set { _estado = value; RaisePropertyChangedEvent("estado"); }
        }

        private string _codref;
        public string codref 
        {
            get { return _codref; }
            set 
            { 
                _codref = value;
                conNomRef();
                RaisePropertyChangedEvent("codref");
            }
        }

        private string _nomref;
        public string nomref 
        {
            get { return _nomref; }
            set { _nomref = value; RaisePropertyChangedEvent("nomref"); }
        }

        private ObservableCollection<color> _colores = new ObservableCollection<color>();
        public ObservableCollection<color> colores
        {
            get { return _colores; }
            set { _colores = value; RaisePropertyChangedEvent("colores"); }
        }
        public class color : ObservableObject
        {
            private Boolean _estaSel = true;
            public Boolean estaSel
            {
                get { return _estaSel; }
                set { _estaSel = value; RaisePropertyChangedEvent("estaSel"); }
            }

            private string _codcol;
            public string codcol
            {
                get { return _codcol; }
                set { _codcol = value; RaisePropertyChangedEvent("codcol"); }
            }

            private string _nomcol;
            public string nomcol
            {
                get { return _nomcol; }
                set { _nomcol = value; RaisePropertyChangedEvent("nomcol"); }
            }
        }

        public void consColor()
        {
            try
            {
                clases.CLSMAECOL maecol = new clases.CLSMAECOL();
                List<clases.CLSMAECOL> col = maecol.ListarColores();
                foreach (clases.CLSMAECOL r in col)
                {
                    color a = new color { codcol = r.CODCOL_COL, nomcol = r.NOMCOL_COL };
                    colores.Add(a);
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private VMvisorFotoReferencia _visorFotoReferencia = new VMvisorFotoReferencia();
        public VMvisorFotoReferencia visorFotoReferencia
        {
            get { return _visorFotoReferencia; }
            set { _visorFotoReferencia = value; base.OnPropertyChanged("visorFotoReferencia"); }
        }

        string selcolores;
        public void ConSelcolores()
        {
            try
            {
                selcolores = "";
                foreach (color r in colores)
                {
                    if (r.estaSel)
                    {
                        if (String.IsNullOrEmpty(selcolores))
                        {
                            selcolores = r.codcol;
                        }
                        else
                        {
                            selcolores = selcolores + "-" + r.codcol;
                        }
                    }
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
        public void consCli() 
        {
            try 
            {
                lisCli = selCli.listaCliente();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }


        public void conNomRef() 
        {
            try 
            {
                clases.CLSMAEREF refe = new clases.CLSMAEREF {CODREF_REF=_codref };
                refe.Consultar();
                nomref = refe.NOMREF_REF;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private DataTable _informe=new DataTable();
        public DataTable informe
        {
            get{return _informe;}
            set{_informe=value; RaisePropertyChangedEvent("informe"); }
        }

        public void procesar(String StrCodigoColeccion) 
        {
            try 
            {
                Mouse.OverrideCursor = Cursors.Wait;
                clases.CLSTEMPORAL tmp = new clases.CLSTEMPORAL();
                ConSelcolores();

                #region FJRF - Enviamos el codigo del cliente
                String StrClienteInicial, StrClienteFinal;//FJRF - Creamos las variables que tendran el codigo del cliente
                if (selCli == null)//FJRF - Si no hay una seleccion hacemos lo siguiente
                {
                    StrClienteInicial = "   ";//FJRF - Enviamos el valor por defecto
                    StrClienteFinal = "zzz";//FJRF - Enviamos el valor por defecto
                }
                else//FJRF - Si se selecciono algo hacemos lo siguiente
                {
                    if (String.IsNullOrEmpty(selCli.CODCLI_CLI) == true)//FJRF - si el codigo del cliente no trae nada hacemos lo siguiente
                    {
                        StrClienteInicial = "   ";//FJRF - Enviamos el valor por defecto
                        StrClienteFinal = "zzz";//FJRF - Enviamos el valor por defecto
                    }
                    else//FJRF - Si trae algun dato hacemos lo siguiente
                    {
                        StrClienteInicial = selCli.CODCLI_CLI;//FJRF - Enviamos el valor seleccionado
                        StrClienteFinal = selCli.CODCLI_CLI;//FJRF - Enviamos el valor seleccionado
                    }

                }
                #endregion

                tmp.SP_INFPEDCLITAL(StrClienteInicial, StrClienteFinal, desde, hasta, codref, selcolores, estado, StrCodigoColeccion);
                informe = tmp.TMPPEDCLITAL;
                Mouse.OverrideCursor = Cursors.Arrow;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        public void selTodo() 
        {
            try 
            {
                foreach (color r in colores) 
                {
                    r.estaSel = true;
                }     
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
        public void selNinguno()
        {
            try
            {
                foreach (color r in colores)
                {
                    r.estaSel = false;
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private BitmapImage _imagen1 = new BitmapImage();
        public BitmapImage imagen1
        {
            get { return _imagen1; }
            set { _imagen1 = value; RaisePropertyChangedEvent("imagen1"); }
        }

        private string _REFE;
        public string REFE 
        {
            get { return _REFE; }
            set 
            { 
                _REFE = value;
                if (!String.IsNullOrEmpty(_REFE))
                {
                    visorFotoReferencia.strCodigo = _REFE.Substring(0, 4);
                    visorFotoReferencia.strColor = _REFE.Substring(4, 2);
                }
                RaisePropertyChangedEvent("REFE");
            }
        }
        
        public void buscarRef() 
        {
            try
            {
                FRMBuscarCol f = new FRMBuscarCol();
                f.EsReferencia = true;
                f.RequiereColor = false;
                f.Retorno = "";
                f.ShowDialog();
                if (!String.IsNullOrEmpty(f.Retorno))
                {
                    codref = f.Retorno;
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }        
        }

        public void imprimir()
        {
            try
            {
                DataSet ds = new DataSet("dsConPedCliTal");
                DataTable encabezado = new DataTable("ENCABEZADO");
                encabezado.Columns.Add("CLIENTE");
                encabezado.Columns.Add("DESDE");
                encabezado.Columns.Add("HASTA");
                encabezado.Columns.Add("REFERENCIA");
                encabezado.Columns.Add("ESTADO");
                DataRow r = encabezado.NewRow();
                r["CLIENTE"] =selCli==null?"":selCli.NOMCLI_CLI;
                r["DESDE"] = desde.ToShortDateString();
                r["HASTA"] = hasta.ToShortDateString();
                r["REFERENCIA"] = nomref;
                r["ESTADO"] = estado.Equals("P") ? "Pendiente" : "Original";
                encabezado.Rows.Add(r);
                ds.Tables.Add(encabezado);
                informe.TableName = "TMPPEDCLITAL";
                ds.Tables.Add(informe.Copy());

                String StrRutaReporteAImprimir = MDOgeneral.StrRutaAplicacionReportes + "repConPedCliTal.rpt";//FJRF - Armamos la ruta completa donde estara el reporte
                //String StrRutaReporteAImprimir = @"C:\produccion\produccion\reportes\" + "repConPedCliTal.rpt";//FJRF - Armamos la ruta completa donde estara el reporte

                Vista vista = new Vista { ds = ds, reporte = StrRutaReporteAImprimir };
                vista.Show();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
    }
}
